package ar.edu.utn.frsf.tpae.a2012.g03.impl;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.AnnotationConfiguration;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import ar.edu.utn.frsf.tpae.a2012.g03.dao.PagosDAO;
import ar.edu.utn.frsf.tpae.a2012.g03.model.Cuenta;
import ar.edu.utn.frsf.tpae.a2012.g03.model.Movimiento;
import ar.edu.utn.frsf.tpae.a2012.g03.model.MovimientoPago;

@Component
public class PagosHibernateDAO implements PagosDAO {
	
	//private SessionFactory sessionFactory = new AnnotationConfiguration().configure().buildSessionFactory();
	private SessionFactory sessionFactory;

	  // Setter utilizado por Spring.
	  @Autowired(required = true)
	  public void setSessionFactory(SessionFactory factory) {
	    this.sessionFactory = factory;
	  }

	  private Session getCurrentSession() {
	    return sessionFactory.getCurrentSession();
	  }

	@Override
	public int getCantidadPagos() {
		List<Movimiento> cuentas = new ArrayList<Movimiento>();
		try{
			 Query query = getCurrentSession().createQuery("from " + Movimiento.class.getName());

			 cuentas = (List<Movimiento>) query.list();
		}
		catch (Exception ex) {
			
		}
		
		return cuentas.size();
	}

	public int getCantidadMovPagos() {
		Session session = null;
		List<MovimientoPago> cuentas = new ArrayList<MovimientoPago>();
		try{
			 Query query = getCurrentSession().createQuery("from " + MovimientoPago.class.getName());

			 cuentas = (List<MovimientoPago>) query.list();
		}
		catch (Exception ex) {
			ex.printStackTrace();
		}
		
		return cuentas.size();
	}
	@Override
	public void realizarPago(Cuenta unaCuenta) {
		
		getCurrentSession().saveOrUpdate(unaCuenta);	
	}
}
